      SUBROUTINE  DEIGEN(A,R,N,MV)                                      00010000
CCC       EIGENVALUES AND EIGENVECTORS OF A DIAGONAL, SYMMETRIC, REAL   00020000
CCC       MATRIX IN THE INCREASING ORDER.                               00030000
CCC           --------------- COPIED FROM IBM LIBRARY--------------     00040000
      IMPLICIT REAL*8(A-H,O-Z)                                          00050000
      DIMENSION A(1),R(1)                                               00060000
      RANGE=1.0D-12                                                     00070000
      IF(MV-1) 10,25,10                                                 00080000
   10 IQ=-N                                                             00090000
      DO 20 J=1,N                                                       00100000
      IQ=IQ+N                                                           00110000
      DO 20 I=1,N                                                       00120000
      IJ=IQ+I                                                           00130000
      R(IJ)=0.0                                                         00140000
      IF(I-J) 20,15,20                                                  00150000
   15 R(IJ)=1.0                                                         00160000
   20 CONTINUE                                                          00170000
   25 ANORM=0.0                                                         00180000
      DO 35 I=1,N                                                       00190000
      DO 35 J=I,N                                                       00200000
      IF(I-J) 30,35,30                                                  00210000
   30 IA=I+(J*J-J)/2                                                    00220000
      ANORM=ANORM+A(IA)*A(IA)                                           00230000
   35 CONTINUE                                                          00240000
      IF(ANORM) 165,165,40                                              00250000
   40 ANORM=1.41421356D0* DSQRT(ANORM)                                  00260000
      ANRMX=ANORM*RANGE/DFLOAT(N)                                       00270000
      IND=0                                                             00280000
      THR=ANORM                                                         00290000
   45 THR=THR/DFLOAT(N)                                                 00300000
   50 L=1                                                               00310000
   55 M=L+1                                                             00320000
   60 MQ=(M*M-M)/2                                                      00330000
      LQ=(L*L-L)/2                                                      00340000
      LM=L+MQ                                                           00350000
      IF(DABS(A(LM))-THR) 130,65,65                                     00360000
   65 IND=1                                                             00370000
      LL=L+LQ                                                           00380000
      MM=M+MQ                                                           00390000
      X=0.5*(A(LL)-A(MM))                                               00400000
      Y=-A(LM)/ DSQRT(A(LM) *A(LM)+X*X)                                 00410000
      IF(X) 70,75,75                                                    00420000
   70 Y=-Y                                                              00430000
   75 SINX=Y/ DSQRT(2.*(1.0+( DSQRT(1.0-Y*Y))))                         00440000
      SINX2=SINX*SINX                                                   00450000
      COSX= DSQRT(1.0-SINX2)                                            00460000
      COSX2=COSX*COSX                                                   00470000
      SINCS =SINX*COSX                                                  00480000
      ILQ=N*(L-1)                                                       00490000
      IMQ=N*(M-1)                                                       00500000
      DO 125 I=1,N                                                      00510000
      IQ=(I*I-I)/2                                                      00520000
      IF(I-L) 80,115,80                                                 00530000
   80 IF(I-M) 85,115,90                                                 00540000
   85 IM=I+MQ                                                           00550000
      GO TO 95                                                          00560000
   90 IM=M+IQ                                                           00570000
   95 IF(I-L) 100,105,105                                               00580000
  100 IL=I+LQ                                                           00590000
      GO TO 110                                                         00600000
  105 IL=L+IQ                                                           00610000
  110 X=A(IL)*COSX-A(IM)*SINX                                           00620000
      A(IM)=A(IL)*SINX+A(IM)*COSX                                       00630000
      A(IL)=X                                                           00640000
  115 IF(MV-1) 120,125,120                                              00650000
  120 ILR=ILQ+I                                                         00660000
      IMR=IMQ+I                                                         00670000
      X=R(ILR)*COSX-R(IMR)*SINX                                         00680000
      R(IMR)=R(ILR)*SINX+R(IMR)*COSX                                    00690000
      R(ILR)=X                                                          00700000
  125 CONTINUE                                                          00710000
      X=2.0*A(LM)*SINCS                                                 00720000
      Y=A(LL)*COSX2+A(MM)*SINX2-X                                       00730000
      X=A(LL)*SINX2+A(MM)*COSX2+X                                       00740000
      A(LM)=(A(LL)-A(MM))*SINCS+A(LM)*(COSX2-SINX2)                     00750000
      A(LL)=Y                                                           00760000
      A(MM)=X                                                           00770000
  130 IF(M-N) 135,140,135                                               00780000
  135 M=M+1                                                             00790000
      GO TO 60                                                          00800000
  140 IF(L-(N-1)) 145,150,145                                           00810000
  145 L=L+1                                                             00820000
      GO TO 55                                                          00830000
  150 IF(IND-1) 160,155,160                                             00840000
  155 IND=0                                                             00850000
      GO TO 50                                                          00860000
  160 IF(THR-ANRMX) 165,165,45                                          00870000
  165 IQ=-N                                                             00880000
      DO 185 I=1,N                                                      00890000
      IQ=IQ+N                                                           00900000
      LL=I+(I*I-I)/2                                                    00910000
      JQ=N*(I-2)                                                        00920000
      DO 185 J=I,N                                                      00930000
      JQ=JQ+N                                                           00940000
      MM=J+(J*J-J)/2                                                    00950000
      IF(A(LL)-A(MM)) 170,185,185                                       00960000
  170 X=A(LL)                                                           00970000
      A(LL)=A(MM)                                                       00980000
      A(MM)=X                                                           00990000
      IF(MV-1) 175,185,175                                              01000000
  175 DO 180 K=1,N                                                      01010000
      ILR=IQ+K                                                          01020000
      IMR=JQ+K                                                          01030000
      X=R(ILR)                                                          01040000
      R(ILR)=R(IMR)                                                     01050000
  180 R(IMR)=X                                                          01060000
  185 CONTINUE                                                          01070000
      RETURN                                                            01080000
      END                                                               01090000
